// js脚本文件必须引用Page对象
var dataArr = require('../../../data/posts-data.js');
// 获取全局变量
var app = getApp();
// 代码样式格式化快捷键：alt+shift+f
Page({
  data: {
    // 定义收藏状态变量
    collected: false,
    // 定义音乐播放状态变量
    isMusic: false,
  },

  onLoad: function (option) {
    // 转发前配置
    // shareTicket 有两个用途：
    // 用户主动转发后，获取转发到目标群群信息，对应上图UI。
    // 用户在群组中打开小程序，获取群组信息,对应上图 G1 群组中的用户。
    wx.showShareMenu({
      withShareTicket: true
    });
    
    var news_id = option.id;

    // 获取新闻详情的数据，并进行数据绑定
    var obj = dataArr.newsList[news_id];
    this.setData({ newsObj: obj });

    // 函数间以data对象为媒介进行参数的传递
    this.data.news_id = news_id;

    /* 
     * 设置缓存，小程序中如果用户不主动清除缓存的话，缓存是永久存在的
     * 即使小程序被关闭，缓存依然存在
     * 缓存的上限为最大不能查过10MB
    */

    /* 
     * 设置、修改缓存
     * 异步设置、修改缓存，wx.setStorage
     * 同步设置、修改缓存，wx.setStorageSync('key','data');
    */

    /* 
     * 获取缓存
     * 异步获取缓存，wx.getStorage()
     * 同步获取缓存，wx.getStorageSync('key');
    */

    /*
     * 清除指定key的缓存
     * 异步清除缓存，wx.removeStorage()
     * 同步清除缓存，wx.removeStorageSync('key');
    */

    /*
     * 清除所有缓存
     * 异步清除所有缓存，wx.clearStorage();
     * 同步清除所有缓存，wx.clearStorageSync();
    */

    /* 
    * 同步、异步操作的选择与业务逻辑相关
    * 同步的缺点：该操作等待时，其后面的逻辑无法运行
    * 多层异步嵌套，代码可读性差，调试难
    */

    /* 
     * 利用本地缓存来实现收藏功能
     * 定义缓存数据
     * var postsCollection={
     *   '0': 'true',
     *   '1': 'true',
     *   '2': 'true',
     *   ...
     * }
    */
    var collectionObj = wx.getStorageSync('collectionObj');
    this.judgeCollection(news_id, collectionObj);

    // 音乐功能    
    // 全局音乐播放状态监听及正在播放音乐文章ID的监听    
    var music_state = app.globalData.g_isMusic;
    if (music_state && news_id === app.globalData.g_newsId) {
      this.setData({ isMusic: true });
    } else {
      this.setData({ isMusic: false });
    }
    /*
    * 页面加载时，框架提供的音乐总控开关状态的监听
    * 框架提供的模块调用自定义方法是通过事件监听函数来实现的，这种方法称之为“事件驱动”
    * 小程序是数据优先的，如果要修改页面的内容，直接修改其绑定的数据即可
    * 数据绑定的优势：更好的进行单元测试
    */
    var that = this;
    // 监听音乐播放
    wx.onBackgroundAudioPlay(function () {
      that.setData({ isMusic: true });
      // 修改全局变量
      app.globalData.g_isMusic = true;
      app.globalData.g_newsId = that.data.news_id;

    });
    // 监听音乐暂
    wx.onBackgroundAudioPause(function () {
      that.setData({ isMusic: false });
      // 修改全局变量
      app.globalData.g_isMusic = false;
      app.globalData.g_newsId = null;
    });
    // 监听音乐停止
    wx.onBackgroundAudioStop(function(){
      that.setData({ isMusic: false });
      // 修改全局变量
      app.globalData.g_isMusic = false;
      app.globalData.g_newsId = null;
    });
  },

  // 判断收藏缓存是否存在
  judgeCollection: function (id, obj) {
    if (obj) {
      // 存在
      var v = obj[id];
      this.data.collected = v;
    } else {
      // 不存在
      var collectionObj = {};
      collectionObj[id] = false;
      wx.setStorageSync('collectionObj', collectionObj)
    }
  },

  // 点击修改收藏缓存并反馈信息
  onCollectionTap: function () {
    var k = this.data.news_id,
      collectionObj = wx.getStorageSync('collectionObj');
    // 自定义函数的调用
    this.showToast(k, collectionObj);
  },

  // 界面->交互反馈->显示消息提示框
  showToast: function (key, obj) {
    var v = !obj[key];
    wx.showToast({
      title: v ? '收藏成功' : '取消收藏',
      icon: 'none',
      duration: 1000
    });
    this.setData({ collected: v });
    obj[key] = v;
    wx.setStorageSync('collectionObj', obj);
  },

  // 界面->交互反馈->显示模态弹窗
  showModal: function (key, obj) {
    // 注意this指代值的变化
    var v = !obj[key],
      that = this;
    wx.showModal({
      title: v ? '收藏' : '取消',
      content: v ? '是否收藏该文章！' : '是否取消收藏该文章！',
      success: function (res) {
        if (res.confirm) {
          // 用户点击确定
          that.setData({ collected: v });
          obj[key] = v;
          wx.setStorageSync('collectionObj', obj);
        } else if (res.cancel) {
          // 用户点击取消          
        }
      }
    });
  },

  // 分享功能
  // 界面->交互反馈->显示操作菜单
  onShareTap: function () {
    var infoArr = ['分享到QQ', '分享到微信', '分享到微博'];
    wx.showActionSheet({
      itemList: infoArr,
      success: (res) => {
        /*
         * res.cancel 用户是不是点击了取消按钮，如果未点击，则返回undefined
         * res.tapIndex 数组itemList中元素的序号，从0开始
        */
        var index = res.tapIndex;
        index === 1 && this.wechatShare();
        console.log(index);
        wx.showModal({
          title: '用户' + infoArr[index],
          content: '现在无法实现' + infoArr[index] + '功能！',
        });
      },
      fail: function (res) {
        // 点击了取消按钮
        console.log(res.errMsg);
      }
    })
  },

  // 把转发流程切分：

// 转发前配置
// 转发时
// 转发到群组后打开
// 二次转发

  wechatShare() {
    
    console.log('wechat');
  },

  // 点击修改音乐状态变量
  onMusicTap: function () {
    /* 
     * 移动端音乐播放的特点：在一个页面开始播放，切换到另一个页面时不会主动暂停，除非调用了暂停或者停止的方法
     * 音乐播放后，小程序会提供一个总控开关来控制音乐的播放与暂停
    */
    if (this.data.isMusic) {
      // 暂停音乐
      wx.pauseBackgroundAudio();
      this.setData({ isMusic: false });
    } else {
      // 播放音乐
      var musicObj = this.data.newsObj.music;
      // console.log();
      wx.playBackgroundAudio({
        // 不可引用本地音乐文件
        dataUrl: musicObj.url,
        title: musicObj.title,
        // 封面也不可引用本地图片
        coverImgUrl: musicObj.coverImg
      });
      this.setData({ isMusic: true });
    }
  },

  /**
   * 监听用户点击页面内转发按钮（button 组件 open-type="share"）或右上角菜单“转发”按钮的行为，并自定义转发内容。
   * 用户点击右上角分享
   * 2.转发时获取群信息
   */
  onShareAppMessage(res) {
    console.log(res);
    // path 中可以加入参数 ,成功或失败都不会触发回调
    return {
      title: '自定义转发标题',
      path: '/page/news/news-detail/news-detail?id=123',
      // imageUrl: '',
    }
  },

  /**
   * 监听右上角菜单“分享到朋友圈”按钮的行为，并自定义分享内容。
   */
  onShareTimeline() {
    return {
      title: "朋友圈",
      query: "/page/news/news-detail/news-detail?id=123",
      // imageUrl: '',
    };
  }

})